
#ifndef __PARSER_H__
#define __PARSER_H__

#define IDENTIFIER 256
#define INTEGER 257
#define FLOATING 258
#define CHARACTER 259
#define STRING 260
#define ELLIPSIS 261
#define COLONCOLON 262
#define DOTSTAR 263
#define ADDEQ 264
#define SUBEQ 265
#define MULEQ 266
#define DIVEQ 267
#define MODEQ 268
#define XOREQ 269
#define ANDEQ 270
#define OREQ 271
#define SL 272
#define SR 273
#define SREQ 274
#define SLEQ 275
#define EQ 276
#define NOTEQ 277
#define LTEQ 278
#define GTEQ 279
#define ANDAND 280
#define OROR 281
#define PLUSPLUS 282
#define MINUSMINUS 283
#define ARROWSTAR 284
#define ARROW 285
#define ASM 286
#define AUTO 287
#define BOOL 288
#define BREAK 289
#define CASE 290
#define CATCH 291
#define CHAR 292
#define CLASS 293
#define CONST 294
#define CONST_CAST 295
#define CONTINUE 296
#define DEFAULT 297
#define DELETE 298
#define DO 299
#define DOUBLE 300
#define DYNAMIC_CAST 301
#define ELSE 302
#define ENUM 303
#define EXPLICIT 304
#define EXPORT 305
#define EXTERN 306
#define FALSE 307
#define FLOAT 308
#define FOR 309
#define FRIEND 310
#define GOTO 311
#define IF 312
#define INLINE 313
#define INT 314
#define LONG 315
#define MUTABLE 316
#define NAMESPACE 317
#define NEW 318
#define OPERATOR 319
#define PRIVATE 320
#define PROTECTED 321
#define PUBLIC 322
#define REGISTER 323
#define REINTERPRET_CAST 324
#define RETURN 325
#define SHORT 326
#define SIGNED 327
#define SIZEOF 328
#define STATIC 329
#define STATIC_CAST 330
#define STRUCT 331
#define SWITCH 332
#define TEMPLATE 333
#define THIS 334
#define THROW 335
#define TRUE 336
#define TRY 337
#define TYPEDEF 338
#define TYPEID 339
#define TYPENAME 340
#define UNION 341
#define UNSIGNED 342
#define USING 343
#define VIRTUAL 344
#define VOID 345
#define VOLATILE 346
#define WCHAR_T 347
#define WHILE 348

typedef int token_t;

typedef void * node_t;

bool cpp_parser_typedef_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_namespace_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_original_namespace_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_namespace_alias(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_class_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_enum_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_identifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_literal(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_integer_literal(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_character_literal(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_floating_literal(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_string_literal(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_boolean_literal(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_translation_unit(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_primary_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_id_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_unqualified_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_qualified_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_nested_name_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_class_or_namespace_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_postfix_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_expression_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_pseudo_destructor_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_unary_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_unary_operator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_placement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_type_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_direct_new_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_initializer(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_delete_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_cast_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_pm_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_multiplicative_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_additive_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_shift_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_relational_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_equality_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_and_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_exclusive_or_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_inclusive_or_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_logical_and_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_logical_or_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_conditional_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_assignment_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_assignment_operator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_constant_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_labeled_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_expression_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_compound_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_statement_seq(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_selection_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_condition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_iteration_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_for_init_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_jump_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_declaration_statement(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_declaration_seq(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_block_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_simple_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_decl_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_decl_specifier_seq(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_storage_class_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_function_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_simple_type_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_name(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_elaborated_type_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_enum_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_enumerator_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_enumerator_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_enumerator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_namespace_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_named_namespace_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_original_namespace_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_extension_namespace_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_unnamed_namespace_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_namespace_body(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_namespace_alias_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_qualified_namespace_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_using_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_using_directive(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_asm_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_linkage_specification(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_init_declarator_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_init_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_direct_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_ptr_operator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_cv_qualifier_seq(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_cv_qualifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_declarator_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_specifier_seq(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_abstract_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_direct_abstract_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_parameter_declaration_clause(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_parameter_declaration_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_parameter_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_function_definition(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_function_body(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_initializer(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_initializer_clause(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_initializer_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_class_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_class_head(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_class_key(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_member_specification(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_member_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_member_declarator_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_member_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_pure_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_constant_initializer(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_base_clause(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_base_specifier_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_base_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_access_specifier(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_conversion_function_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_conversion_type_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_conversion_declarator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_ctor_initializer(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_mem_initializer_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_mem_initializer(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_mem_initializer_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_operator_function_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_operator(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_parameter_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_parameter(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_parameter(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_id(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_argument_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_argument(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_explicit_instantiation(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_explicit_specialization(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_try_block(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_function_try_block(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_handler_seq(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_handler(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_exception_declaration(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_throw_expression(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_exception_specification(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_id_list(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_declaration_seq_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_TEMPLATE_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_nested_name_specifier_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_expression_list_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_COLONCOLON_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_placement_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_initializer_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_new_declarator_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_expression_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_statement_seq_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_condition_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_decl_specifier_seq_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_init_declarator_list_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_identifier_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_enumerator_list_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_TYPENAME_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_initializer_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_cv_qualifier_seq_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_exception_specification_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_constant_expression_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_abstract_declarator_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_specifier_seq_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_direct_abstract_declarator_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_parameter_declaration_list_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_ELLIPSIS_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_ctor_initializer_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_COMMA_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_member_specification_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_base_clause_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_member_declarator_list_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_SEMICOLON_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_pure_specifier_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_constant_initializer_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_access_specifier_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_VIRTUAL_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_conversion_declarator_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_EXPORT_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_handler_seq_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_assignment_expression_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_type_id_list_opt(const token_t * tokens, int & token_i, node_t & node);
bool cpp_parser_template_argument_list_opt(const token_t * tokens, int & token_i, node_t & node);

#endif //__PARSER_H__
